//
// Created by Administrator on 2021/5/5.
//

/*
请编写一个函数，使其可以删除某个链表中给定的（非末尾）节点。传入函数的唯一参数为 要被删除的节点 。


现有一个链表 --head =[4,5,1,9]，它可以表示为:


示例 1：

输入：head = [4,5,1,9], node = 5
输出：[4,1,9]
解释：给定你链表中值为5的第二个节点，那么在调用了你的函数之后，该链表应变为 4 -> 1 -> 9.
示例 2：

输入：head = [4,5,1,9], node = 1
输出：[4,5,9]
解释：给定你链表中值为1的第三个节点，那么在调用了你的函数之后，该链表应变为 4 -> 5 -> 9.


提示：

链表至少包含两个节点。
链表中所有节点的值都是唯一的。
给定的节点为非末尾节点并且一定是链表中的一个有效节点。
不要从你的函数中返回任何结果。

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/delete-node-in-a-linked-list
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。*/


//Definition for singly-linked list.
struct ListNode {
    int val;
    ListNode *next;

    ListNode(int x) : val(x), next(nullptr) {}
};


class Solution {
public:
    void deleteNode(ListNode *node) {
        /**
         * 链表中的值各不相同，因此只需要删除一个
         *  题解给的是假删除，只是覆盖
         */
        node->val = node->next->val;
        node->next = node->next->next;
   }
};

int main() {
    ListNode n1{4}, n2{5}, n3{1}, n4{9};
    n1.next = &n2;
    n2.next = &n3;
    n3.next = &n4;
    Solution sol;
    sol.deleteNode(&n2);

    return 0;
}
